-
Notifications
You must be signed in to change notification settings - Fork 13.5k
release/20.x: [LLD][COFF] Allow -arm64xsameaddress in ARM64EC directives (#139631) #140051
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: release/20.x
Are you sure you want to change the base?
Conversation
Make it a no-op for now, which is sufficient for non-hybrid images. Fixes llvm#131712. (cherry picked from commit d5da557)
@mstorsjo What do you think about merging this PR to the release branch? |
@llvm/pr-subscribers-platform-windows @llvm/pr-subscribers-lld-coff Author: None (llvmbot) ChangesBackport d5da557 Requested by: @cjacek Full diff: https://github.com/llvm/llvm-project/pull/140051.diff 3 Files Affected:
diff --git a/lld/COFF/Driver.cpp b/lld/COFF/Driver.cpp
index f50ca529df4d7..a669b7e9296f6 100644
--- a/lld/COFF/Driver.cpp
+++ b/lld/COFF/Driver.cpp
@@ -492,6 +492,12 @@ void LinkerDriver::parseDirectives(InputFile *file) {
case OPT_alternatename:
parseAlternateName(arg->getValue());
break;
+ case OPT_arm64xsameaddress:
+ if (!file->symtab.isEC())
+ Warn(ctx) << arg->getSpelling()
+ << " is not allowed in non-ARM64EC files (" << toString(file)
+ << ")";
+ break;
case OPT_defaultlib:
if (std::optional<StringRef> path = findLibIfNew(arg->getValue()))
enqueuePath(*path, false, false);
diff --git a/lld/COFF/Options.td b/lld/COFF/Options.td
index b6fd3d0daaef9..ea2e7ded38043 100644
--- a/lld/COFF/Options.td
+++ b/lld/COFF/Options.td
@@ -355,3 +355,4 @@ def tlbid : P_priv<"tlbid">;
def tlbout : P_priv<"tlbout">;
def verbose_all : P_priv<"verbose">;
def guardsym : P_priv<"guardsym">;
+def arm64xsameaddress : P_priv<"arm64xsameaddress">;
diff --git a/lld/test/COFF/arm64x-sameaddress.test b/lld/test/COFF/arm64x-sameaddress.test
new file mode 100644
index 0000000000000..c69be9d268c3b
--- /dev/null
+++ b/lld/test/COFF/arm64x-sameaddress.test
@@ -0,0 +1,56 @@
+REQUIRES: aarch64
+RUN: split-file %s %t.dir && cd %t.dir
+
+RUN: llvm-mc -filetype=obj -triple=arm64ec-windows func-arm64ec.s -o func-arm64ec.obj
+RUN: llvm-mc -filetype=obj -triple=aarch64-windows func-arm64.s -o func-arm64.obj
+RUN: llvm-mc -filetype=obj -triple=arm64ec-windows drectve.s -o drectve.obj
+RUN: llvm-mc -filetype=obj -triple=aarch64-windows drectve.s -o drectve-arm64.obj
+RUN: llvm-mc -filetype=obj -triple=arm64ec-windows %S/Inputs/loadconfig-arm64ec.s -o loadconfig-arm64ec.obj
+RUN: llvm-mc -filetype=obj -triple=aarch64-windows %S/Inputs/loadconfig-arm64.s -o loadconfig-arm64.obj
+
+RUN: lld-link -machine:arm64x -dll -noentry -out:out.dll loadconfig-arm64.obj loadconfig-arm64ec.obj \
+RUN: func-arm64.obj func-arm64ec.obj drectve.obj
+
+RUN: lld-link -machine:arm64x -dll -noentry -out:out-cmd.dll loadconfig-arm64.obj loadconfig-arm64ec.obj \
+RUN: func-arm64.obj func-arm64ec.obj -arm64xsameaddress:func
+
+RUN: lld-link -machine:arm64ec -dll -noentry -out:out-ec.dll loadconfig-arm64ec.obj func-arm64ec.obj drectve.obj
+
+RUN: lld-link -machine:arm64x -dll -noentry -out:out-warn.dll loadconfig-arm64.obj loadconfig-arm64ec.obj \
+RUN: func-arm64.obj func-arm64ec.obj drectve-arm64.obj 2>&1 | FileCheck --check-prefix=WARN %s
+WARN: lld-link: warning: -arm64xsameaddress: is not allowed in non-ARM64EC files (drectve-arm64.obj)
+
+#--- func-arm64.s
+ .section .text,"xr",discard,func
+ .globl func
+func:
+ mov x0, #1
+ ret
+
+#--- func-arm64ec.s
+ .section .text,"xr",discard,"#func"
+ .globl "#func"
+"#func":
+ mov x0, #2
+ ret
+
+ .weak_anti_dep func
+ .set func,"#func"
+
+ .section .wowthk,"xr",discard,entry_thunk
+ .globl entry_thunk
+entry_thunk:
+ mov x0, #3
+ ret
+
+ .section .test,"dr"
+ .rva func
+
+ .section .hybmp$x,"yi"
+ .symidx "#func"
+ .symidx entry_thunk
+ .word 1
+
+#--- drectve.s
+ .section .drectve, "yn"
+ .ascii " -arm64xsameaddress:func"
|
@llvm/pr-subscribers-lld Author: None (llvmbot) ChangesBackport d5da557 Requested by: @cjacek Full diff: https://github.com/llvm/llvm-project/pull/140051.diff 3 Files Affected:
diff --git a/lld/COFF/Driver.cpp b/lld/COFF/Driver.cpp
index f50ca529df4d7..a669b7e9296f6 100644
--- a/lld/COFF/Driver.cpp
+++ b/lld/COFF/Driver.cpp
@@ -492,6 +492,12 @@ void LinkerDriver::parseDirectives(InputFile *file) {
case OPT_alternatename:
parseAlternateName(arg->getValue());
break;
+ case OPT_arm64xsameaddress:
+ if (!file->symtab.isEC())
+ Warn(ctx) << arg->getSpelling()
+ << " is not allowed in non-ARM64EC files (" << toString(file)
+ << ")";
+ break;
case OPT_defaultlib:
if (std::optional<StringRef> path = findLibIfNew(arg->getValue()))
enqueuePath(*path, false, false);
diff --git a/lld/COFF/Options.td b/lld/COFF/Options.td
index b6fd3d0daaef9..ea2e7ded38043 100644
--- a/lld/COFF/Options.td
+++ b/lld/COFF/Options.td
@@ -355,3 +355,4 @@ def tlbid : P_priv<"tlbid">;
def tlbout : P_priv<"tlbout">;
def verbose_all : P_priv<"verbose">;
def guardsym : P_priv<"guardsym">;
+def arm64xsameaddress : P_priv<"arm64xsameaddress">;
diff --git a/lld/test/COFF/arm64x-sameaddress.test b/lld/test/COFF/arm64x-sameaddress.test
new file mode 100644
index 0000000000000..c69be9d268c3b
--- /dev/null
+++ b/lld/test/COFF/arm64x-sameaddress.test
@@ -0,0 +1,56 @@
+REQUIRES: aarch64
+RUN: split-file %s %t.dir && cd %t.dir
+
+RUN: llvm-mc -filetype=obj -triple=arm64ec-windows func-arm64ec.s -o func-arm64ec.obj
+RUN: llvm-mc -filetype=obj -triple=aarch64-windows func-arm64.s -o func-arm64.obj
+RUN: llvm-mc -filetype=obj -triple=arm64ec-windows drectve.s -o drectve.obj
+RUN: llvm-mc -filetype=obj -triple=aarch64-windows drectve.s -o drectve-arm64.obj
+RUN: llvm-mc -filetype=obj -triple=arm64ec-windows %S/Inputs/loadconfig-arm64ec.s -o loadconfig-arm64ec.obj
+RUN: llvm-mc -filetype=obj -triple=aarch64-windows %S/Inputs/loadconfig-arm64.s -o loadconfig-arm64.obj
+
+RUN: lld-link -machine:arm64x -dll -noentry -out:out.dll loadconfig-arm64.obj loadconfig-arm64ec.obj \
+RUN: func-arm64.obj func-arm64ec.obj drectve.obj
+
+RUN: lld-link -machine:arm64x -dll -noentry -out:out-cmd.dll loadconfig-arm64.obj loadconfig-arm64ec.obj \
+RUN: func-arm64.obj func-arm64ec.obj -arm64xsameaddress:func
+
+RUN: lld-link -machine:arm64ec -dll -noentry -out:out-ec.dll loadconfig-arm64ec.obj func-arm64ec.obj drectve.obj
+
+RUN: lld-link -machine:arm64x -dll -noentry -out:out-warn.dll loadconfig-arm64.obj loadconfig-arm64ec.obj \
+RUN: func-arm64.obj func-arm64ec.obj drectve-arm64.obj 2>&1 | FileCheck --check-prefix=WARN %s
+WARN: lld-link: warning: -arm64xsameaddress: is not allowed in non-ARM64EC files (drectve-arm64.obj)
+
+#--- func-arm64.s
+ .section .text,"xr",discard,func
+ .globl func
+func:
+ mov x0, #1
+ ret
+
+#--- func-arm64ec.s
+ .section .text,"xr",discard,"#func"
+ .globl "#func"
+"#func":
+ mov x0, #2
+ ret
+
+ .weak_anti_dep func
+ .set func,"#func"
+
+ .section .wowthk,"xr",discard,entry_thunk
+ .globl entry_thunk
+entry_thunk:
+ mov x0, #3
+ ret
+
+ .section .test,"dr"
+ .rva func
+
+ .section .hybmp$x,"yi"
+ .symidx "#func"
+ .symidx entry_thunk
+ .word 1
+
+#--- drectve.s
+ .section .drectve, "yn"
+ .ascii " -arm64xsameaddress:func"
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
Backport d5da557
Requested by: @cjacek